
package com.cougil.uoc.seghismed.business;

import com.cougil.uoc.seghismed.model.Usuari;
import com.cougil.uoc.seghismed.model.ciphed.UsuariCiphed;
import com.cougil.uoc.seghismed.model.comunicacions.Peticio;
import com.cougil.uoc.seghismed.model.comunicacions.Resposta;
import com.cougil.uoc.seghismed.model.comunicacions.ciphed.PeticioCiphed;
import com.cougil.uoc.seghismed.model.comunicacions.ciphed.RespostaCiphed;

/**
 * Interfície que conté els principals métodes de l'aplicació, comuns a tots els serveis web
 * 
 * @author Ignacio Cougil Jares
 * 
 */
public interface AppService {

	/**
	 * Intenta autenticar la petició rebuda per un usuari
	 *
	 * @param pCiphed
	 *            Peticio xifrada rebuda
	 * @return Resposta xifrada {@link RespostaCiphed} per a l'usuari que va realitzar la
	 *         petició
	 */
	public RespostaCiphed autenticar(PeticioCiphed pCiphed);

	/**
	 * Cerca l'usuari que representa el Gestor de l'aplicació
	 *
	 * @return usuari gestor trobat amb les seves dades carregades: nom, unitat
	 *         organitzativa, DNI i certificat públic
	 */
	public Usuari findGestor();

	/**
	 * Verifica si l'usuari informat ja es troba autenticat o no. Aquesta operació inclou
	 * comprovar que l'usuari existeix dintre del mapa d'usuaris autenticats i que la
	 * última operació realitzada contra aquest va ser l'aceptació d'autenticació validada
	 *
	 * @param uCiphed
	 *            {@link UsuariCiphed} usuari xifrat que es preten conèixer si està
	 *            autenticat o no
	 * @return booleà que indica si l'usuari es troba autenticat o no
	 */
	public boolean isAutenticat(UsuariCiphed uCiphed);

	/**
	 * Envia una petició al servidor, xifrant-la i desxifrant la resposta remesa
	 *
	 * @param emisor
	 *            {@link Usuari} usuari emisor de la petició amb quina clau privada es
	 *            xifrarà la petició
	 * @param destinatari
	 *            {@link Usuari} usuari destinatari de la petició amb quina clau pública
	 *            es xifrarà la petició
	 * @param peticio
	 *            {@link Peticio} a ésser xifrada
	 * @return Resposta desxifrada
	 */
	public Resposta sendAutenticar(Usuari emisor, Usuari destinatari, Peticio peticio);

	/**
	 * Fi de sessió explicit per a lliberar recursos i desconnectar l'usuari
	 *
	 * @param pCiphed
	 *            Peticio rebuda
	 * @return Resposta xifrada per a l'usuari que va realitzar la petició
	 */
	public RespostaCiphed sortir(PeticioCiphed ciphed);

}
